package com.dyz.leetcode._10_slidingWindow;
/* leetcode 487. 最大连续 1 的个数 II
    给定一个二进制数组，你可以最多将 1 个 0 翻转为 1，找出其中最大连续 1 的个数。

    示例 1：
    输入：[1,0,1,1,0]
    输出：4
    解释：翻转第一个 0 可以得到最长的连续 1。
         当翻转以后，最大连续 1 的个数为 4。

    注：
    输入数组只包含 0 和 1.
    输入数组的长度为正整数，且不超过 10,000

    进阶：
    如果输入的数字是作为 无限流 逐个输入如何处理？
    换句话说，内存不能存储下所有从流中输入的数字。您可以有效地解决吗？
     */

public class _487_maxConsecutiveOnesII {
    public int maxConsecutiveOnes(int[] nums){
        int ans = 0;
        int left=0, right =0;
        int windowCnt = 0;
        while(right<nums.length){
            if(nums[right]==0){
                windowCnt++;
                if(windowCnt==2){
                    ans = Math.max(ans, right-left);
                }
            }
            while (windowCnt==2){
                if(nums[left]==0) {windowCnt--;}
                left++;
            }
            right++;
        }
        return Math.max(ans, right-left);

    }

    public int maxConsecutiveOnes2(int[] nums){
        int ans = 0;
        int left=0, right =0;
        int zeroInex = -1;
        while(right<nums.length){
            if(nums[right]==0){
                if(zeroInex>=0){
                    ans = Math.max(ans, right-left);
                    left = zeroInex+1;
                }
                zeroInex = right;

            }

            right++;
        }
        return Math.max(ans, right-left);

    }
}
